package com.example.design_pattern.singleton;

// 和上面 懒汉式（线程不安全）实现上唯一不同是：获取实例的getInstance()方法上加了同步锁。保证了多线程场景下的单例。但是效率会有所折损，不过还好。
public class Singleton04LazyWithLock {

    private static Singleton04LazyWithLock instance;

    private Singleton04LazyWithLock() {}

    // 关键点在于，加上了synchronized这个，保证了getInstance方法被通过线程同时调用时的内部操作的原子性
    public static synchronized Singleton04LazyWithLock getInstance() {
        if (instance == null) {
            instance = new Singleton04LazyWithLock();
        }
        return instance;
    }
}
